package com.edu.test;

import com.edu.bean.Book;
import com.edu.mapper.BookMapper;
import com.github.pagehelper.IPage;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

/*
 * @Author:mx
 * @Date:2025/10/15-9:01:17
 */
public class MyTest02 {

    private SqlSession session1 ;


    @Before
    public void init() throws IOException {
        String path = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(path);
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        session1 = sessionFactory.openSession();

    }



    @Test
    public void test02(){
        BookMapper bookMapper = session1.getMapper(BookMapper.class);
        PageHelper.offsetPage(1,10);
        List<Book> bookList = bookMapper.selectAll();
        for (Book book : bookList) {
            System.out.println(book);
        }
    }

    /*
     *       使用方式三:
     *       1.获取到相关的Mapper
     *       2.PageHelper.startPage(页号，页大小)
     *       3.紧跟在后面的查询语句 会自动进行分页
     * */
    @Test
    public void test03(){
        BookMapper bookMapper = session1.getMapper(BookMapper.class);
        PageHelper.startPage(1,10);
        List<Book> bookList = bookMapper.selectAll();
        for (Book book : bookList) {
            System.out.println(book);
        }
    }

    /*
     *       使用方式四: 开启参数绑定
     *              只要 分页插件 发现 你要执行的 查询功能中 有参数的别名就叫做pageNum和pageSize，就会自动分页（不需要手写limit）
     *       0.分页插件需要开启 参数绑定功能
     *                <plugins>
                               <plugin interceptor="com.github.pagehelper.PageInterceptor">
                                    <property name="supportMethodsArguments" value="true"/>
                               </plugin>
                      </plugins>
     *       1.Mapper接口中的查询方法中 需要包含 别名为 pageNum和pageSize的参数
     *       2.mapper.xml中对应的select节点 不需要我们手写 Limit关键字
     *       3.当mapper调用此查询时，传入参数 会自动的执行分页查询（添加limit）
     * */
    @Test
    public void test04(){
        BookMapper bookMapper = session1.getMapper(BookMapper.class);
        List<Book> bookList = bookMapper.selectAll2(5,10);
        for (Book book : bookList) {
            System.out.println(book);
        }
    }

    @Test
    public void test05(){
        BookMapper bookMapper = session1.getMapper(BookMapper.class);
        PageHelper.startPage(5,3);
        //pageHelper 封装的Page对象 本质上就是一个 List集合，所以可以直接遍历
        Page<Book> bookPage = bookMapper.selectAll3();
        for (Book book : bookPage) {
            System.out.println(book);
        }
        // Page对象 可以 转换成 PageInfo对象，会包含分页相关的一些信息
        // page对象调用 toPageInfo方法 得到 PageInfo对象
        PageInfo<Book> pageInfo = new PageInfo<>(bookPage,5);
        System.out.println("当前页号:"+pageInfo.getPageNum());
        System.out.println("当前页号:"+pageInfo.getPageSize());
        System.out.println("总条数:"+pageInfo.getTotal());
        System.out.println("总页数："+pageInfo.getPages());
        System.out.println("有无上一页"+pageInfo.isHasPreviousPage());
        System.out.println("有无上一页"+pageInfo.isHasNextPage());
        for (int num : pageInfo.getNavigatepageNums()) {
            System.out.println(num);
        }
    }





}
